package com.qf.utils;

import com.qf.constant.CommonConstant;
import lombok.Data;

import java.util.HashMap;

/**
 * 范类
 * 默认：成功状态码 20000，消息 成功
 * 失败状态码 40000，消息 失败
 * 额外功能：put 方法，可以直接向 data 中额外添加数据，无需考虑原本 data 中是否有数据。
 * 需注意：若原本 data 中有数据，则将原本数据名（首字母小写）作为 key
 */
@Data
public class R<T> {

    private int code;
    private String msg;
    private T data;

    // 请求失败，状态码 40000，消息 失败
    public static R fail() {
        R r = new R();
        r.setCode(CommonConstant.ERROR);
        r.setMsg("失败");
        return r;
    }

    // 请求失败，置入 响应消息
    public static R fail(String msg) {
        R r = new R();
        r.setCode(CommonConstant.ERROR);
        r.setMsg(msg);
        return r;
    }

    public static R fail(int code,String msg) {
        R r = new R();
        r.setCode(code);
        r.setMsg(msg);
        return r;
    }

    // 请求成功，状态码 20000，消息 成功
    public static R ok() {
        R r = new R();
        r.setCode(CommonConstant.SUCCESS);
        r.setMsg("成功");
        return r;
    }

    // 请求成功，置入 响应消息
    public static R ok(String msg) {
        R r = new R();
        r.setCode(CommonConstant.SUCCESS);
        r.setMsg(msg);
        return r;
    }

    // 请求成功，置入 数据
    public static <T> R ok(T data) {
        R r = new R();
        r.setCode(CommonConstant.SUCCESS);
        r.setMsg("成功");
        r.setData(data);
        return r;
    }

    // 请求成功，置入 响应状态码、消息
    public static R ok(int code, String msg) {
        R r = new R();
        r.setCode(code);
        r.setMsg(msg);
        return r;
    }

    // 请求成功，置入 响应消息、数据
    public static <T>R ok(String msg, T data) {
        R r = new R();
        r.setCode(CommonConstant.SUCCESS);
        r.setMsg(msg);
        r.setData(data);
        return r;
    }


    public R() {
    }

    public R(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public R(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

}
